package lq644;
//题解：https://www.yuque.com/u21257367/se5crg/uxaxdob82onrf7l7?singleDoc# 《lq644“方格分割”》
public class Main {
    private static int[][] mp = new int[7][7];
    static int ans = 0;
    //四个方向偏移量，一维数组写法
    static int[] dx = { 1, -1, 0, 0 };
    static int[] dy = { 0, 0, -1, 1 };

    public static void main(String[] args) {
    	//中心点标记为已占据
    	//所有对称图形中心点必然是要经过的
        mp[3][3] = 1;
        //中心点开始dfs
        dfs(3, 3);
        //答案排除重复的情况
        System.out.println(ans / 4);
    }

    private static void dfs(int i, int j) {
        // 坐标走到头退出dfs
    	// 找到一个解
        if (i == 0 || i == 6 || j == 0 || j == 6) {
            ans++;
            return;
        }
        //四个方向dfs
        for (int k = 0; k < 4; k++) {
            int x = i + dx[k]; //下一步的x坐标
            int y = j + dy[k]; //下一步的y坐标
            if (mp[x][y] != 1) {
            	
                mp[x][y] = 1;  //dfs经过的坐标
                mp[6-x][6-y] = 1; ////dfs经过的坐标对称的坐标
                dfs(x, y);
                mp[x][y] = 0; //回溯
                mp[6-x][6-y] = 0; //回溯
                
            }
        }
    }
}